package com.zking.myservlet.user;

import com.zking.dao.NewsDao;
import com.zking.dao.UserDao; // 导入自定义的UserDao类，用于用户数据的数据库操作
import com.zking.entity.User; // 导入自定义的User类，代表用户实体

import javax.servlet.ServletException; // 导入Servlet异常类
import javax.servlet.annotation.WebServlet; // 导入Servlet注解类
import javax.servlet.http.HttpServlet; // 导入HttpServlet类，是所有Servlet的基类
import javax.servlet.http.HttpServletRequest; // 导入HttpServletRequest类，用于处理客户端请求
import javax.servlet.http.HttpServletResponse; // 导入HttpServletResponse类，用于生成响应
import java.io.IOException; // 导入IO异常类

// 使用@WebServlet注解定义Servlet的访问路径为/manage/userAdd
// 表明当用户访问此URL时，将会由UserAdd这个Servlet类来处理请求
@WebServlet("/manage/userAdd")
public class UserAdd extends HttpServlet {

    // 覆写doPost方法，处理HTTP POST请求
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 设置请求编码为UTF-8，以确保从表单接收到的数据（如中文姓名和地址）能够正确解析
        request.setCharacterEncoding("utf-8");

        // 设置响应的内容类型为HTML，并指定字符编码为UTF-8
        // 这样可以确保响应中的中文内容能够正确显示在浏览器中
        response.setContentType("text/html;charset=utf-8");

        // 输出日志，表示已经进入到这个Servlet的doPost方法
        System.out.println("UserAdd===进来");

        // 从请求中获取用户名、真实姓名、密码、性别、出生日期、身份证、邮箱、手机号、地址等参数
        String userId= request.getParameter("userName");
        String userName= request.getParameter("name");
        String password= request.getParameter("passWord");
        String sex= request.getParameter("sex");
        // 处理出生日期
        String birthYear = request.getParameter("birthyear");
        String birthMonth = request.getParameter("birthmonth");
        String birthDay = request.getParameter("birthday");

        String birthDate = birthYear + "-" + birthMonth + "-" + birthDay;

        String identityCode= request.getParameter("identityCode");
        String email= request.getParameter("email");
        String mobile= request.getParameter("mobile");
        String address= request.getParameter("address");

        // 创建一个新的User对象，并设置其各个属性
        // 这里假设User类的构造方法接受上述参数
        User user = new User(userId, userName, password, sex, birthDate, identityCode, email, mobile, address, 0);

        // 调用UserDao的addUser方法，将新的用户添加到数据库中
        // addUser方法应该返回一个布尔值，表示添加是否成功
        boolean flag = UserDao.addUser(user);

        // 判断添加是否成功
        if (flag) {
            // 如果添加成功，可以进行一些后续操作，例如跳转到用户列表页面或显示成功消息
            response.getWriter().println("用户添加成功！");//用户名不能重复
            // 如果添加成功，则计算新闻列表的分页信息
            // 假设每页显示2条新闻（pageSize为2）
            int pageSize = 2;

            // 调用NewsDao的getMaxPage方法，获取最大页数（即最后一页的页码）
            // 这个方法应该根据新闻总数和每页显示的新闻数来计算
            int maxPage = UserDao.getMaxPage(pageSize);

            // 重定向到新闻列表的分页显示页面，并带上最后一页的页码作为参数
            // 这里假设newsSelectByPage是一个能够显示分页新闻列表的Servlet或JSP页面
            response.sendRedirect("userSelectByPage?pageIndex="+maxPage);
        } else {
            // 如果添加失败，可以向用户显示错误消息或跳转到错误页面
            response.getWriter().println("用户添加失败！");
        }
    }

    // 覆写doGet方法，处理HTTP GET请求
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response); // GET请求也调用doPost方法处理
    }
}
